#ifndef ENCIPHER_H
#define ENCIPHER_H

#include <QObject>
#include <QCryptographicHash>
#include <QByteArray>
#include <memory>
#include <openssl/sha.h>
#include <openssl/aes.h>
class Encipher : public QObject
{
    Q_OBJECT
public:
    static Encipher* getInstance();
    static void setAesKey(const QByteArray& key);
    static void setAesiv(const QByteArray& iv);
    bool validate(const QByteArray& mes,const QByteArray& sha256value);
    QByteArray sha256(const QByteArray& input);

    std::unique_ptr<QByteArray> sha_aesEncrypt(const QByteArray& data);
    std::unique_ptr<QByteArray> sha_aesDecrypt(const QByteArray& data);

    QByteArray aesEncrypt(QByteArray data);

    QByteArray aesDecrypt(const QByteArray& data);

signals:
private:
    Encipher();
    QByteArray addPkcs7Padding(QByteArray data);
    QByteArray removePkcs7Padding(QByteArray data);
    QByteArray aesDecrypt(const QByteArray& data, const QByteArray& key, const QByteArray& iv);
    QByteArray aesEncrypt(const QByteArray& data, const QByteArray& key, const QByteArray& iv);


    static Encipher* encipher;
    static QByteArray aeskey;
    static QByteArray aesiv;
};

#endif // ENCIPHER_H
